home *** CD-ROM | disk | FTP | other *** search
- // Version 1.00 05/12/97 First release as an applet.
- // This is also my FIRST applet EVER in this language.
- // By Daniel Barron @ Beebug Computers Ltd
- // Copyright Risc User May 1997
-
- int mines_handle;
- int mines_toolbox = 0;
- int mines_total = 0;
- int mines_mem = 0;
- int mines_views = 0;
- int mines_centre = 1;
- string mines_boxes;
- int mines_iamalive = 1;
- int mines_c1 = 1664525;
- int mines_c2 = 907633393;
- int mines_seed;
- int mines_numberofthem = 10;
- int mines_numbercorrect;
- int mines_numberblanks;
- int mines_flagsdone;
- int mines_emptysquaresdone;
-
-
- int mines_rnd(void)
- {
- int w1;
- int w2;
- mines_seed = mines_c1 * mines_seed + mines_c2;
- w1 = mines_c1 * mines_seed + mines_c2;
- mines_seed = w1;
- w1 = w1 & 0xFFFF;
- w2 = mines_seed & 0x0000FFFF;
- w1 = w1 << 16;
- w2 = w2 >> 16;
- w1 = w1 | w2;
- mines_seed = mines_seed ^ w1;
- w1 = mines_seed & 255;
- if (w1 < 0)
- w1 = 0 - w1;
- return(w1);
- }
-
-
- void mines_updatesquare(int x, int y, string letter,int add)
- {
- int icon;
- mines_emptysquaresdone = mines_emptysquaresdone + add;
- icon = 2 + x + y *10;
- writeicon(mines_handle, icon, letter);
- }
-
-
- string mines_getsquare(int x, int y)
- {
- string result;
- int offset;
- offset=2 + x + y * 10;
- result=readicon(mines_handle, offset);
- return(result);
- }
-
-
- int mines_noofmines(int x, int y)
- {
- int offset;
- int mine;
- int value;
- if (x < 0)
- return(0);
- if (y < 0)
- return(0);
- if (x > 9)
- return(0);
- if (y > 9)
- return(0);
- offset=x + y * 10;
- mine = schar(mines_boxes, offset);
- value = 0;
- if (mine == 33)
- value = 1;
- return(value);
- }
-
-
- void mines_placeaflag(int x,int y)
- {
- if (mines_getsquare(x,y) == "@")
- {
- mines_updatesquare(x,y,"*",0);
- mines_flagsdone --;
- if (mines_noofmines(x,y) == 1)
- mines_numbercorrect --;
- }
- else
- {
- if (mines_getsquare(x,y) == "*")
- {
- if(mines_flagsdone > 9)
- return();
- mines_updatesquare(x,y,"@",0);
- mines_flagsdone ++;
- if (mines_noofmines(x,y) == 1)
- mines_numbercorrect ++;
- }
- }
- }
-
-
- void mines_dodie(void)
- {
- int x;
- int y;
- int square;
- for ( x=0; x<10 ; x++)
- {
- for ( y=0; y<10 ; y++)
- {
- square = mines_noofmines(x,y);
- if( square == 1)
- mines_updatesquare(x,y,"#",0);
- }
- }
- mines_iamalive = 0;
- writeicon(mines_handle, 102, "Bye Bye Dodo");
- }
-
-
- void mines_dowin(void)
- {
- mines_iamalive = 0;
- writeicon(mines_handle, 102, "Woopy Do Dar!");
- }
-
-
- void mines_footflag(void)
- {
- string whatitis;
- whatitis = readicon(mines_handle, 102);
- if (whatitis == "Foot")
- writeicon(mines_handle, 102, "Flag");
- else
- writeicon(mines_handle, 102, "Foot");
- }
-
-
- void mines_checkmines(int x,int y)
- {
- int mines = 0;
- string letter;
- if (x < 0)
- return();
- if (y < 0)
- return();
- if (x > 9)
- return();
- if (y > 9)
- return();
- mines += mines_noofmines(x-1,y-1);
- mines += mines_noofmines(x,y-1);
- mines += mines_noofmines(x+1,y-1);
- mines += mines_noofmines(x-1,y);
- mines += mines_noofmines(x+1,y);
- mines += mines_noofmines(x-1,y+1);
- mines += mines_noofmines(x,y+1);
- mines += mines_noofmines(x+1,y+1);
- if (mines_getsquare(x,y) == "*")
- {
- switch (mines)
- {
- case 0:
- mines_updatesquare(x,y," ",1);
- mines_checkmines(x-1,y-1);
- mines_checkmines(x,y-1);
- mines_checkmines(x+1,y-1);
- mines_checkmines(x-1,y);
- mines_checkmines(x+1,y);
- mines_checkmines(x-1,y+1);
- mines_checkmines(x,y+1);
- mines_checkmines(x+1,y+1);
- break;
- case 1:mines_updatesquare(x,y,"1",1);
- break;
- case 2:mines_updatesquare(x,y,"2",1);
- break;
- case 3:mines_updatesquare(x,y,"3",1);
- break;
- case 4:mines_updatesquare(x,y,"4",1);
- break;
- case 5:mines_updatesquare(x,y,"5",1);
- break;
- case 6:mines_updatesquare(x,y,"6",1);
- break;
- case 7:mines_updatesquare(x,y,"7",1);
- break;
- case 8:mines_updatesquare(x,y,"8",1);
- break;
- }
- }
- }
-
-
- void mines_clickonmine(int icon)
- {
- int square;
- int x;
- int y;
- y = icon - 2;
- y = y / 10;
- x= icon - 2 - y * 10;
- if (readicon(mines_handle, 102) == "Flag")
- mines_placeaflag(x,y);
- else
- {
- mines_checkmines(x,y);
- square = mines_noofmines(x,y);
- if( square == 1)
- mines_dodie();
- }
- if(mines_numbercorrect == mines_numberofthem)
- {
- if(mines_emptysquaresdone == mines_numberblanks)
- {
- if(mines_flagsdone == mines_numberofthem)
- {
- mines_dowin();
- }
- }
- }
- }
-
-
- void mines_alterstring(string letter, int pos)
- {
- string temp1;
- string temp2;
- string s;
- s = mines_boxes;
- temp1 = mids(s, 0, pos);
- temp2 = mids(s, pos+1, slen(s)-(pos+1));
- mines_boxes = temp1 + letter + temp2;
- }
-
-
- void mines_laymines(void)
- {
- int n=0;
- int num;
- mines_boxes = " ";
- while (n < mines_numberofthem)
- {
- do num=mines_rnd()/2;
- while (num>99);
- if (mids(mines_boxes,num,1)==" ");
- {
- n++;
- mines_alterstring("!", num);
- }
- }
- }
-
-
- void mines_restart(void)
- {
- int n;
- mines_iamalive = 1;
- mines_numbercorrect = 0;
- mines_numberblanks = 100 - mines_numberofthem;
- mines_flagsdone = 0;
- mines_emptysquaresdone = 0;
- writeicon(mines_handle, 102, "Foot");
- for (n = 2; n < 102; n++)
- {
- writeicon(mines_handle, n, "*");
- }
- mines_seed = (clock() * 4267) & 0xffffffff;
- mines_laymines();
- }
-
-
- void mines_display(void)
- {
- display_window(mines_handle, 0, mines_centre);
- mines_centre = 0;
- }
-
-
- int mines_entry(int entry,int subcode)
- {
- mines_toolbox = !mines_toolbox;
- if(mines_toolbox)
- mines_display();
- else
- close_window(mines_handle);
- return(0);
- }
-
-
- int mines_flags(int entry, string &text)
- {
- return(mines_toolbox);
- }
-
-
- void mines_clicktoolbox(int handle,int icon,int bits,int mx,int my)
- {
- if (mines_iamalive==1)
- {
- if(icon > 1 )
- {
- if(icon < 102 )
- mines_clickonmine(icon);
- }
- if(icon == 1)
- mines_footflag();
- }
- if(icon == 0)
- mines_restart();
- }
-
-
- void mines_closetoolbox(int handle)
- {
- close_window(handle);
- mines_toolbox = 0;
- }
-
-
- void mines_viewopen(int user, int view)
- {
- ++mines_views;
- }
-
-
- void mines_viewclose(int user, int view)
- {
- --mines_views;
- if(!mines_views)
- close_window(mines_handle);
- }
-
-
- void mines_gaincaret(int user, int view, int gain)
- {
- if(gain && mines_toolbox && mines_views == 1)
- mines_display();
- }
-
-
- void main(void)
- {
- int n;
- int test;
- int square;
- script_menu_initialise();
- addentry_menu(script_handle, "mines_entry","mines_flags","","","{Mines}");
- mines_handle = create_window("mines_main");
- addwindowhandler(0,mines_handle,"mines_clicktoolbox");
- addwindowhandler(2,mines_handle,"mines_closetoolbox");
- addeventhandler(0x005, 0, "mines_viewopen");
- addeventhandler(0x006, 0, "mines_viewclose");
- for(n = 1; n < 100; ++n);
- {
- test = schar(mines_boxes, n);
- }
- mines_restart();
- }
-